﻿// MIT License
// 开源地址：https://gitee.com/co1024/AbcMvc
// Copyright (c) 2021-2023 1024
// Abc.Mvc=Furion+EF+SqlSugar+Pear layui admin.

namespace Abc.Core.CoreServices;
/// <summary>
/// 差异日志监听
/// </summary>
public class EntityDiffLogListener : ISqlSugarDiffLogListener
{
    public void DiffLog(ISqlSugarClient db, DiffLogModel diffLogModel)
    {
        //操作前记录  包含： 字段描述 列名 值 表名 表描述
        var editBeforeData = diffLogModel.BeforeData;//插入Before为null，之前还没进库
        //操作后记录   包含： 字段描述 列名 值  表名 表描述
        var editAfterData = diffLogModel.AfterData;
        var sql = diffLogModel.Sql;
        var parameter = diffLogModel.Parameters;
        var data = diffLogModel.BusinessData;//这边会显示你传进来的对象
        var time = diffLogModel.Time;
        var diffType = diffLogModel.DiffType;//enum insert 、update and delete

        //Write logic
        LogEx.Debug($"操作类型：{diffType:G}\r\nsql:{sql}\r\n参数：{parameter.ToJson()}\\传进来的对象：{data.ToJson()}\r\n执行时间:{time?.TotalSeconds}\r\n操作前：{editBeforeData.ToJson()}\r\n操作后：{editAfterData.ToJson()}", "SqlSugar\\AOP\\差异日志");

        //var logDiff = new SysLogDiff
        //{
        //    // 操作后记录（字段描述、列名、值、表名、表描述）
        //    AfterData = JsonConvert.SerializeObject(diffLogModel.AfterData),
        //    // 操作前记录（字段描述、列名、值、表名、表描述）
        //    BeforeData = JsonConvert.SerializeObject(diffLogModel.BeforeData),
        //    // 传进来的对象
        //    BusinessData = JsonConvert.SerializeObject(diffLogModel.BusinessData),
        //    // 枚举（insert、update、delete）
        //    DiffType = diffLogModel.DiffType.ToString(),
        //    Sql = UtilMethods.GetSqlString(DbType.MySql, diffLogModel.Sql, diffLogModel.Parameters),
        //    Parameters = JsonConvert.SerializeObject(diffLogModel.Parameters),
        //    Duration = diffLogModel.Time == null ? 0 : (int)diffLogModel.Time.Value.TotalMilliseconds
        //};


        //Console.ForegroundColor = ConsoleColor.Red;
        //Console.WriteLine(DateTime.Now + $"\r\n**********差异日志开始**********\r\n{Environment.NewLine}{JsonConvert.SerializeObject(logDiff)}{Environment.NewLine}**********差异日志结束**********\r\n");
    }
}
